A disk drive can be connected to a single computer on which multiple processes are executing and can also be connected to multiple computers each with multiple processes. Thus, there are usually multiple, independent requests for data communicated to the disk drive. The requests are conventionally stored in a FIFO “stack”. The disk drive then accesses the data for the request at the top of the stack, sends that data to the requestor on the communication interface, and processes the next request in the stack. In very low speed applications, this method is adequate, but as the speed of the system increases, the performance of the overall system can diminish as the requests for files begin to fill the stack. One of the deleterious effects on system performance occurs when the host is using the disk drive for memory paging. Since the RAM memory of any system is limited, it is conventional for the computer system host to use disk storage as virtual memory when needed. The “pages” from RAM are temporarily stored on the disk drive, and then retrieved as needed by the host. The available virtual RAM memory is then very large compared to the available RAM. As the demand on the system increases, such as multiple programs running simultaneously, the amount of paging increases. Because of the FIFO design of the disk drive, the requests for pages and for program data are entered into the stack and processed in turn. As a request for a page is entered into the stack, the host must wait until the other requests above it are serviced before the page request is serviced.
A second impact on system performance with virtual memory is fragmentation of the data on the disk drive. Since a page of virtual RAM is continuous data, the speed of access is better when the data is stored in contiguous blocks of memory, then the data can be retrieved as quickly as possible with a “serial read”. If the page data is stored with the normal program files, the page data becomes fragmented such that access of the data is slower than would be expected is the data was contiguous.
One solution to the fragmentation problem is to store the pages in a partition where there is always sufficient space to store the data in contiguous blocks. In the Microsoft Windows operating system, the user must setup this separate partition for paging. But the need for contiguous space will vary as the number of programs running on the host varies. The system designer is then forced to allocate sufficient space for the maximum number of pages even through much of the space will never be used.
Another solution is to add another disk drive that is dedicated to the storage of virtual memory pages. But this requires space and power in the subsystem for the additional disk drive as well as the cost of maintaining another disk drive in the sytsem.
In general, some files (such as pages of virtual RAM) are more important to the overall performance of a system than others. In addition, some files may be accessed rarely, but when an access request occurs, that file should be moved to the top of the stack and serviced immediately. There is clearly a need for a more versatile stack management system than the current single stack FIFO design.
Prior art data storage devices such as disk drives have drive control systems that include means for accepting a set of commands from a host computer. The set of commands includes commands related to self-testing, calibration and power management. Each drive has programming code (microcode) in nonvolatile memory for execution by a controller, which is a special purpose processor, to enable it to perform essential functions. The microcode can be updated through the drive's communication interface as described, for example, in U.S. Pat. No. 5,659,801 to Kopsaftis. Various standard communication interfaces with both hardware components and command protocols are commonly used such as IDE, SCSI, Serial ATA, and Fibre Channel Arbitrated Loop (FC-AL).
Commercially available disk drives cannot perform any operation on the data other than those directly related to its storage such as, for example, performing error correction computations. There have been some suggestions for enhancing disk drives (HDD) by adding an application-specific component for receiving and executing application-specific instructions. Published US patent application 20030227703 by F. D. Hinshaw, describes application-specific components which can perform application-specific tasks, such as database operations, using data on the HDDs and return results to a local host or even a remote host via a network. Examples of the application-specific components include a circuit board or an integrated circuit such as an Application Specific Integrated Circuit (ASIC), Field Programmable Gate Array (FPGA), Central Processing Unit (CPU), or Digital Signal Processor (DSP). The additional component is capable of receiving application-specific instructions via a standard network connection and executing these application-specific instructions on the data contained on the disks. The application-specific component may be in the form of an add-on board which couples to the controller circuit or, alternatively, in the form of an application-specific chip which mates with a socket provided on the controller circuit.
In US patent application 20020162075 by Talagala, et al. a storage system is described which includes a storage array controller and a storage array. The storage array controller issues scrubbing operation commands to one or more of the disk drive controllers. In response, each disk drive controller that receives a scrubbing operation command reads data from within a data range from at least one of the disk drives, calculates a new checksum for the data, and compares the new checksum to a preexisting checksum for the data. If the new checksum doesn't equal the preexisting checksum, the data within the data range is determined to be erroneous.